🌧️ ->🌤
TASK |
状态 |
预计耗时 |
一生一芯:调试npc的device |
queue |
6h |
整理《卫星导航》PPT |
queue |
2h |
总计 |
|
8h |
本来觉得今天几乎没有办法收拾完昨天的烂摊子了。。。漫长的bug链条让我在这两天时间里手足无措,不过很幸运还是赶在计划范围内解决了问题。就像讲义中对代码的描述类似,在一次一次成功地debug后,我也会对自己越来越有信心吧。
吸取之前的教训,以后debug完成后要做个简单的记录,那么这次的bug主要有:
- npc在打开difftest的情况下运行microbench程序,会在一条固定的指令处触发ref(nemu)访存的out of bound报错,发型报错时ref的pc和访存目标addr都被指令了,这个报错非常奇怪让人摸不捉头脑。。。经排查问题出在访问device时应该skip这条指令,但是skip时要把dut的状态传递给ref,但是由于我的dut定义的cpu states结构体npc_t和ref的cpu states结构体不一样,而skip时只是传递两个结构体的指针,导致dut向ref传递的数据是对不上的,最终导致ref的cpu states在skip过后反而进入了一个错误的状态,从而触发了该错误,我的修正方法时定义了一个与ref的cpu states结构相同的中间结构体,手动将值赋值给中间结构体,再把中间结构体传递给ref。
- 另一个错误是运行mario程序时遇到的段错误,debug发现段错误时npc正在访问0xa0000060,别的先不说这个地址我熟啊,这是keyboard的地址,这意味着红白机程序会自动访问keyboard(其实也合理),但是我翻了config.h也没找到哪里能禁用keyboard,讲义就要求实现rtc和serial就可以跑字符版的mario导致我先入为主了(也有可能是别的细节我没有注意到?),我以为正确实现rtc和serial就足够跑通mario。
- 目前npc还遇到了和nemu一样的超低性能的问题,nemu的问题在于讲义中提到的定时器的问题,但相同的方法对npc不起作用。。。
实际上
TASK |
状态 |
实际耗时 |
一生一芯:调试npc的device |
run |
6h |
整理《卫星导航》PPT |
run |
2h |
总计 |
|
8h |